←
▼
▲
Function LoadLocalVariableInXML( in_CurrentXML_Element as IXMLDOMElement,
in_GlobalVariables as LazyDictionaryClass, in_FilePathOfXML as string ) as LazyDictionaryClass
XML の LocalVariable タグで定義された変数を持つ、遅延評価する辞書を生成します。
【引数】
in_CurrentXML_Element
in_GlobalVariables
の返り値
変数の参照がある XML 要素のオブジェクト
in_FilePathOfXML
in_CurrentXML_Element が書かれている XML ファイルのパス
テスト
T_LazyDictionaryXML_Local
→ T_LazyDictionary.vbs
ソース
→ vbslib.vbs
遅延評価する辞書
返り値
LocalVariable タグを記述する場所は、変数を参照している XML タグの兄弟ノード、または、親方向の
ノードの子ノードに記述してください。 同じ名前の変数を記述したときは、変数を参照している XML
タグに近い定義の値が得られます。
と同じく変数を定義する XML タグですが、参照する場所によって
LocalVariable タグは、
値が異なるローカル変数を定義することができます。
<LocalVariable name="${Var1}" value="ABC"/>
ローカル変数の定義の例:
変数名は ${Var1} で、その値は ABC です。
${Var1}
<Root>
<Tree>
<LocalVariable name="${Var1}" value="AA"/>
<ProjectA path="${Var1}.txt"/>
</Tree>
<Tree>
<ProjectB path="${Var1}.txt"/>
<LocalVariable name="${Var1}" value="BB"/>
</Tree>
<Tree>
<ProjectC path="${Var1}.txt"/>
</Tree>
<LocalVariable name="${Var1}" value="CC"/>
</Root>
ローカル変数の参照の例:
ProjectA の path 属性は AA.txt になります。
ProjectB の path 属性は BB.txt になります。
ProjectC の path 属性は CC.txt になります。
${Var1}
${Var1}
${Var1}
ただし、Variable タグが定義できる XML ファイルやアプリケーションであっても、LocalVariable タグは
無視される場合があります。 また、XML 属性やテキストによっては、LocalVariable タグによって定義
された変数を参照できない場合もあります。 それぞれの仕様を確認してください。 逆に LocalVariable
タグが使える場所では、 Variable タグも記述できます。
に設定すると、値をフル パスにすることができます。
値に
ことができます。
in_CurrentXML_Element 引数に指定した XML要素の親方向のすべての XML要素の直下にある
<LocalVariable> と、すべての <Variable> による変数の定義が返り値に含まれます。
→ T_LazyDictionaryXML_Local.xml
path = "Sample.xml"
Set root = LoadXML( path, Empty )
Set global_variables = LoadVariableInXML( root, path )
Set project_tag = root.selectSingleNode( "Tree/ProjectA" )
Set variables = LoadLocalVariableInXML( project_tag, global_variables, path )
path = project_tag.getAttribute( "path" )
path = variables( path )
サンプル
"Tree/ProjectA"
variables
variables
in_CurrentXML_Element 引数に、XML要素 A の兄弟 XML要素 B を指定して返る辞書は、XML要素 A を
指定して返る辞書と同じ内容です。
←
▼
▲
Function new_LazyDictionaryClass( RootXML_Element as IXMLDOMElement ) as LazyDictionaryClass
XML の Variable タグで定義された変数を持つ、遅延評価する辞書を生成します。
【引数】
RootXML_Element
XML のルート要素オブジェクト
返り値
遅延評価する辞書
RootXML_Element 引数
XML のルート要素オブジェクト、または、FilePathClass のオブジェクト
FilePathClass のオブジェクト
以下のどちらかを指定できます。
注意
廃止されました。 代わりは、
←
▼
▲
Function GetPathLazyDictionary() as LazyDictionaryClass
パスに関する変数か定義された辞書を返します。
【引数】
返り値
パスに関する変数か定義された辞書
→ vbslib.vbs
ソース
OSの環境変数だけでなく、下記の変数も参照することができます。
${vbslib}
${scriptlib}
vbslib Prompt.vbs があるフォルダーのフル パス。
vbslib Prompt.vbs を起動したときだけ定義されます。
scriptlib フォルダーのフル パス。
と異なり、末尾に \ なし。
←
▼
▲
ParseDollarVariableString "abc ${VAR1}, ${VAR2} def", sub_strings, variables
Assert IsSameArray( sub_strings, Array( "abc ", ", ", " def" ) )
Assert IsSameArray( variables, Array( "${VAR1}", "${VAR2}" ) )
Sub ParseDollarVariableString( the_String as string, out_SubStringArray as array of string,
out_VariableArray as array of string )
文字列の中の ${ } を使った変数の部分とそれ以外の部分に分割します。
【引数】
the_String
out_SubStringArray
分割する前の文字列
(出力) 変数以外の部分の配列
out_VariableArray
(出力) 変数の部分の配列
サンプル
ソース
関連
→ ToolsLib.vbs
→ T_Str.vbs
テスト
T_ParseDollarVariableString
文字列の先頭に "${ }" があるときは、out_SubStringArray(0) = "" になります。
←
▼
▲
配列 (Array)
←
▼
▲
Function new_EmptyArray( in_UBound as integer ) as array
指定した要素数の空要素を持つ配列を生成します。
ソース
→ vbslib.vbs
VBScript (WSH) だけでなく、エクセル VBA でも使えます。
【引数】
in_UBound
最大配列番号。 要素数−1
返り値
生成した配列
←
▼
▲
Sub AddArrElem( Dst, Src )
配列の要素を追加コピーします。
【引数】
Dst
Src
コピー先配列。 この配列の末尾に追加
コピー元の要素が入った配列、またはコピー元の単体。
これまで入っていた要素の後に追加します。
→ AddElems (ArrayClass)
Dst には、Me.Property 形式ではなく、Property 形式にしてください。(下記)
AddArrElem Me.SampleArray, Array( 1,2 )
×:追加されない
AddArrElem SampleArray, Array( 1,2 )
○:追加される
Me.
AddArrElem arr1, arr2 '// Set "arr1"
AddArrElem arr1, new ClassA '// Set "arr1"
関連
テスト
サンプル
→ T_Arr.vbs
T_Arr1
ソース
→ vbslib.vbs
←
▼
▲
Function AddArrElemEx( Dst, Src, IsReturn ) as Dst or Empty
配列の要素を追加コピーします。(機能拡張版)
【引数】
Dst
Src
コピー先配列。 この配列の末尾に Src 引数を追加
コピー元の要素が入った配列、またはコピー元の単体。
IsReturn
True = 返り値は追加コピーした内容、False = 返り値は Empty
参考
ソース
→ vbslib.vbs
←
▼
▲
input_array = Array( "a", "b", Array( "ca", "cb" ), "d", Array( "ea", "eb" ) )
FlatArray out_array, input_array
Assert IsSameArray( out_array, Array( "a", "b", "ca", "cb", "d", "ea", "eb" ) )
Sub FlatArray( out_FlatArray as array, NestedArray as array )
配列の中に配列がネストして入っているとき、フラットにします。
【引数】
out_FlatArray
NestedArray
(出力) フラットにした配列
配列がネストして入っている配列
サンプル
テスト
→ T_Arr.vbs
T_FlatArray
ソース
→ vbslib.vbs
←
▼
▲
Sub CopyArr( Dst, Src )
配列の要素をコピーします。
【引数】
Dst
Arr
コピー先
コピー元
(src)
Arr が配列ではないときは、Dst(0) に Src をコピーします。
Dst に ArrayClass::Items を指定してもコピーした内容は ArrayClass に格納されません。
ArrayClass::Copy を使ってください。
廃止されました。
Dim arr() とすると arr = Array はできませんが、 Dim arr とすると arr = Array ができます。
←
▼
▲
Function SearchInSimpleArray( InData as variant, InArray as array of variant,
OutBaseNumOrArray as array of variant, DefaultOut as variant ) as variant
配列を検索して、別の配列の内容を返します。
【引数】
InData
InArray
配列の要素と比較する値。 数値、文字列など = で判定できるもの
InData を比較する値を要素に持つ配列
OutBaseNumOrArray に指定した配列の要素の1つなど
返り値
InData が InArray に見つからなかったときに出力する値
出力する値を要素に持つ配列。 または、出力の最小数値
DefaultOut
OutBaseNumOrArray
(src)
num = SearchInSimpleArray( "SymbolB", _
Array( "SymbolA", "SymbolB" ), _
Array( 1, 2 ), _
Empty )
'// num = 2
num = SearchInSimpleArray( "SymbolB", Array( "SymbolA", "SymbolB" ), 5, Empty )
'// num = 6
関連
出力の最小数値が 5 で、2番目の配列要素にヒットしたので、5 + ( 2 -1 ) = 6 を返します。
サンプル
サンプル
←
▼
▲
Function GetFirst( in_Collection as variant ) as variant
Assert GetFirst( Array( 1, 2 ) ) = 1
コレクションの最初の要素を返します。
【引数】
in_Collection
配列や辞書コレクション
返り値
サンプル
ソース
配列やコレクションの最初の要素、辞書の場合は最初のキー
→ vbslib.vbs
関連
←
▼
▲
Function IsSameArray( Array1, Array2 ) as boolean
配列のすべての要素が等しいか判定します。
各要素は = で判定します。
要素数も等しいか調べます。
順番も合っている必要があります。
(src)
テスト
ソース
→ T_Arr.vbs
T_IsSameArray
→ vbslib.vbs
Array1 = Empty, Array2 = Empty のときは、True を返します。
Array1, Array2 は、Empty, 配列型、ArrayClass 型のいずれかを指定できます。
関連
←
▼
▲
テスト
ソース
→ T_Arr.vbs
T_IsSameArrayOutOfOrder
→ vbslib.vbs
Function IsSameArrayOutOfOrder( in_Array1 as array, in_Array2 as array, Option_ ) as boolean
配列のすべての要素が等しいか判定します。 ただし、順番が異なっていても等しいとします。
各要素は = で判定します。
Option_ 引数
Empty または、下記の論理和 (or) が指定できます。
c.StopIsNotSame
c は、g_VBS_Lib です。
違った要素を見つけた瞬間に、デバッガーで停止します
関連
←
▼
▲
Function IsSameArrayEx( Array1 as array, Array2 as array, Option_ as IsSameArrayExOptionClass )
as boolean
配列のすべての要素が等しいか判定します。
→ vbslib.vbs
ソース
ソース
→ vbslib.vbs
.IsOutOfOrder
.IsStopNotSame
.CompareFunction
.ParameterOfCompareFunction
順番が異なっていても等しいとするかどうか
違った要素を見つけた瞬間に、デバッガーで停止します
CompareFunction の第3引数に渡す値
←
▼
▲
Sub ReverseObjectArray( in_Array as array, out_Array as array )
配列を内容(オブジェクトのみ)を逆順にします。
【引数】
in_Array
out_Array
配列。逆順にする前の内容
(出力) 逆順の配列の内容
配列の要素が、オブジェクト以外が入っていたり、Empty になっているとエラーになります。
out_Array と in_Array は同じ配列を指定できません。
ただし、in_Array 引数に、array_object.Items (array_object は ArrayClass) を指定したら、
out_Array 引数に、array_object を指定できます。 ただし、ArrayClass ではなくなります。
テスト
→ T_Arr.vbs
T_ReverseObjectArray
で変換してください。
ソース
→ vbslib.vbs
関連
サンプル
ReverseObjectArray an_array.Items, an_array
For Each an_item In an_array
Next
←
▼
▲
Sub Reverse_COM_ObjectArray( in_Array, out_Array )
テスト
→ T_Arr.vbs
T_ReverseObjectArray
ソース
→ vbslib.vbs
.Count プロパティで要素数を参照する配列を、逆順にします。
参考
←
▼
▲
ReverseNotObjectArray
Sub ReverseNotObjectArray( in_Array, out_Array )
ソース
→ vbslib.vbs
要素がオブジェクト型ではない配列を、逆順にします。
←
▼
▲
Sub RemoveObjectArray( in_out_Array, ElementObject )
オブジェクトが格納された配列から、指定したオブジェクトを除外します。
【引数】
in_out_Array
ElementObject
オブジェクトが格納された配列
除外するオブジェクト
ソース
→ vbslib.vbs
関連
←
▼
▲
Sub RemoveObjectsByNames( in_out_Array, Names as variant )
オブジェクトが格納された配列から、Name プロパティがマッチするオブジェクトを除外します。
【引数】
in_out_Array
Names
Name プロパティがあるオブジェクトが格納された配列
Name プロパティと比較するもの
ソース
Names が文字列のとき
Name プロパティと単純に比較します。
Names が RegExp 型のとき
Name プロパティと正規表現で比較します。
Names が配列型のとき
Names がオブジェクトのとき
Name プロパティと Name プロパティを比較します。
配列の要素のそれぞれについて、1つでのマッチしたら除外します。
要素は、文字列、RegExp、Name プロパティを持つオブジェクトを混在できます。
テスト
→ T_Arr.vbs
T_RemoveObjectsByNames
→ vbslib.vbs
←
▼
▲
Function ArrayToNameOnlyClassArray( aArray as array of not object ) as array of NameOnlyClass
オブジェクトではない要素を持つ配列を、NameOnlyClass の配列に変換します。
【引数】
aArray
返り値
オブジェクトではない要素を持つ配列
NameOnlyClass の配列
関連
ソートできる配列にします。
NameOnlyClass の Delegate メンバーは Empty になります。
arr = ArrayToNameOnlyClassArray( Array( "a", "b", "c" ) )
(src)
テスト
→ T_ShakerSort.vbs
T_SortByPath
サンプル
逆の変換
辞書版
←
▼
▲
Function NameOnlyClassArrayToArray( aArray as array of object ) as array of variant
Name プロパティを持つオブジェクトの配列を、Name プロパティの値の配列に変換します。
【引数】
aArray
返り値
Name プロパティを持つオブジェクトの配列
Name プロパティの値の配列
関連
ソートできる配列から戻します。
(src)
テスト
→ T_ShakerSort.vbs
T_SortByPath
逆の変換
辞書版
←
▼
▲
その他
←
▼
▲
辞書 (Dictionary)
参考
Set dic = CreateObject( "Scripting.Dictionary" )
配列の辞書
無ければ追加する辞書
辞書は、次のように生成します。
辞書
←
▼
▲
Function Dict( Elems as array ) as Dictionary
辞書を生成します。
Elems の奇数番目の要素は、キー、偶数番目の要素は、アイテムになります。
キーは文字列のみですが、アイテムはオブジェクトなども指定できます。
サンプル
Set dic = Dict(Array( "Key1","Item1", "Key2","Item2" ))
Set dic = CreateObject( "Scripting.Dictionary" )
dic.Item( "Key1" ) = "Item1"
dic.Item( "Key2" ) = "Item2"
上記は下記と同じ処理内容です
→ T_Dic.vbs # T_Dict
テスト
関連
→ JSON (JavaScript Object Notation)
Set obj = Dict(Array( "Attr1", 123, "Attr2", "ABC" ))
echo obj("Attr1") & obj("Attr2")
サンプル
ソース
→ vbs_inc_sub.vbs
生成した辞書のキーは大文字小文字を区別しません。
←
▼
▲
キーが存在しないときに参照しても、自動的にキーを追加しない辞書。
→ T_Dic.vbs
テスト
T_DictionaryClass
→ vbslib.vbs
ソース
関連
キーが存在しないときに自動的にキーを追加しないため、文字列のスペルミスを防ぐことができます。
ただし、キーとアイテムが異なることが一般的である辞書型では、アイテムを調べなければ
文字列を知ることができないため、開発効率が落ちます。
そこで、キーの先頭が ">" から、アイテムと同じであるようなルールにするとよいでしょう。
Set g = new DictionaryClass
g(">Spell") = "Spell"